package java_thinking.unit_18_IO._18_13;


import nu.xom.*;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Arrays;
import java.util.List;

/**
 * @Desc:   生成XML
 * @author: cww
 * @DateTime: 2019-05-19 14:22
 */

public class Person {
    private String first, last;
    static String file = "src/maindemo/java/java_thinking/unit_18_IO/_18_13/";
    public Person(String first, String last) {
        this.first = first;
        this.last = last;
    }

    public Element getXML() {
        Element person = new Element("person");
        Element firstName = new Element("first");
        firstName.appendChild(first);
        Element lastName = new Element("last");
        lastName.appendChild(last);
        person.appendChild(firstName);
        person.appendChild(lastName);
        return person;
    }

    public Person(Element element) {
        first = element.getFirstChildElement("first").getValue();
        last = element.getFirstChildElement("last").getValue();
    }

    @Override
    public String toString() {
        return "Person{" +
                "first='" + first + '\'' +
                ", last='" + last + '\'' +
                '}';
    }

    public static void format(OutputStream os, Document doc) throws IOException {
        //将CML转换为更具可读性的格式
        Serializer serializer = new Serializer(os, "ISO-8859-1");
        serializer.setIndent(4);
        serializer.setMaxLength(60);
        serializer.write(doc);
        serializer.flush();
    }

    public static void main(String[] args) throws IOException {
        List<Person> people = Arrays.asList(new Person("Dr. Bunsen", "Honeydew"), new Person("Gonzo", "The Great"), new Person("Philip J.","Fry"));
        System.out.println(people);
        Element root = new Element("people");
        for (Person p : people)
            root.appendChild(p.getXML());
        Document doc = new Document(root);
        format(System.out, doc);
        format(new BufferedOutputStream(new FileOutputStream(file +"PersonXML.xml")), doc);

    }
}
